<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div>作用域</div>
    <script>
        // function test(){}
        // test.[[scope]] 
        /**
            隐式的作用域，每个JavaScript函数都是一个对象，对象中有些属性我们可以访问，但有些不可以，这些属性仅供JavaScript引擎存取，[[scope]]就是其中一个。
            [[scope]]指的就是我们所说的作用域，其中存储了运行期上下文的集合。

            作用域链:[[scope]]中所存储的执行期上下文对象的集合，这个集合呈链式链接，我们把这种链式链接叫做作用域链。

            运行期上下文：当函数执行的前一刻，会创建一个称为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境，函数每次执行时对应的执行上下文都是独一独二的
            所以多次调用一个函数会导致创建多个执行上下文（AO），当函数执行完毕，它所产生的执行上下文被销毁。

            查找变量：从作用域链的顶端依次向下查找,每次执行函数的时候新产生的AO在最顶端GO就在底端，所以优先查找最顶端的作用域。
        */
        function a(){
            function b(){
                var b = 234;
                a = 0;
                console.log(c);//10
            }
            var a = 123;
            b();
            console.log(a);//0
        }
        var glob = 100;
        var c = 10;
        a();
        
    </script>
</body>
</html>